package org.example;

import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.jse.JsePlatform;

/**
 * Lua Hello world!
 */
public class App {
    public static void main(String[] args) {
        // luaTest1();
        // System.out.println("------");
        // luaTest2();
        // System.out.println("------");
        luaTest3();
    }

    private static void luaTest3() {
        String luaPath = "lua/res/lua/test.lua";
        Globals globals = JsePlatform.standardGlobals();
        globals.loadfile(luaPath).call();
    }

    /**
     * 在Java中调用Lua的简单示例2：
     */
    private static void luaTest2() {
        // lua脚本文件所在路径
        String luaPath = "lua/res/lua/login.lua";
        Globals globals = JsePlatform.standardGlobals();
        // 加载脚本文件login.lua，并编译
        globals.loadfile(luaPath).call();

        // 获取无参函数hello
        LuaValue func = globals.get(LuaValue.valueOf("hello"));
        // 执行hello方法
        func.call();

        // 获取带参函数test
        LuaValue func1 = globals.get(LuaValue.valueOf("test"));
        // 执行test方法,传入String类型的参数参数
        String data = func1.call(LuaValue.valueOf("I'am from Java!")).toString();
        // 打印lua函数回传的数据
        System.out.println("data return from lua is : " + data);
    }

    /**
     * 在Java中调用Lua的简单示例1
     * <p>
     * 此处luaStr中只能放一个lua的方法，或者是一句lua语句，不可以出现多个function放在同一个String中使用此方法来调用。
     */
    private static void luaTest1() {
        String luaStr = "print 'hello,world!'";
        Globals globals = JsePlatform.standardGlobals();
        LuaValue chunk = globals.load(luaStr);
        chunk.call();
    }
}
